<?php

namespace app\admin\controller;

use think\facade\Request;
use think\Controller;
use think\Db;

class Base extends Controller
{
    // 禁止映射类名单
    public $class_ban = [];
    // 请求信息
    public $request;
    // 页码
    private  $page = 0;
    // 数量
    private  $size = 10;

    // 初始化基础配置   
    public function initialize()
    {
        // 加载禁止映射方法名单
        $this->class_ban = get_class_methods(get_class());
        // 获取请求信息
        $this->request = Request::instance();
        // 初始化页码
        $this->page = input('page') ? input('page') : $this->page;
        // 初始化返回数量
        $this->size = input('size') ? input('size') : $this->size;
    }

    /**
     * Object到Array转换
     * @param object $data 待转换数据
     * @return array 返回数据
     */
    public function ObjtoArray($data)
    {
        // 转换为json数据
        $json = json_encode($data);
        // 格式化json到数组
        $array = json_decode($json, true);
        return $array;
    }

    /**
     * 创建用于赋值的空对象
     * @param mixed $obj 待转换数据
     * @return object 返回数据
     */
    public function newObject($obj = ['find' => ''])
    {
        $array = $obj;
        $json = json_encode($array);
        $data = json_decode($json);
        return $data;
    }

    /**
     * 配置设置
     * @param string $name 配置文件名
     */
    public function getCofContent($name)
    {
        // 是否AJAX请求
        if (!$this->request->isAjax()) {
            return;
        }
        return json(config($name));
    }

    /**
     * 获取列表数据
     */
    public function queryList($info)
    {
        // 载入表
        $db = Db::table($info['table']);

        // 条件
        if (isset($info['where'])) {
            $db = $db->where($info['where']);
        }
        // 链表
        if (isset($info['join'])) {
            $db = $db->join($info['join']);
        }
        // 设置字段
        if (isset($info['field'])) {
            $db = $db->field($info['field']);
        }
        // 分页
        if (isset($info['limit'])) {
            $db = $db->limit($info['limit']);
        }
        // 排序
        if (isset($info['order'])) {
            $db = $db->order($info['order']);
        }
        // 查询
        $data['data'] = $db->select();
        // 状态码
        $data['code'] = 0;
        // 总数
        $count = Db::table($info['table']);
        // 条件
        if (isset($info['where'])) {
            $count = $count->where($info['where']);
        }
        // 总数
        $data['count'] = $count->count();
        // 查询时间
        $data['createTime'] = date("Y-m-d H:i:s");
        return json($data);
    }

    /**
     * 分页查询
     */
    public function getPageing()
    {
        $_page = (input('page') == null || input('page') == '0') ? '1' : input('page');
        // 返回数量
        $_limit = input('limit') == null ? '10' : input('limit');
        // 分页
        $limit = implode(',', [($_page * $_limit) - $_limit, $_limit]);
        return $limit;
    }

    /**
     * 空数据返回
     * @param boolean $obj 是否返回列表格式
     */
    public function initEmptyData($isList = true, $code = '200', $msg = '成功', $obj = [], $count = 0)
    {
        // 状态码
        $data['code'] = $code;
        $data['msg'] = $msg;
        // 数组与对象
        if (!$isList) {
            $data['data'] = $obj;
        } else {
            // 查询
            $data['data']['list'] = [];
            // 页码
            $data['data']['page'] = $this->page;
            // 返回数量
            $data['data']['size'] = $this->size;
            // 总数
            $data['data']['count'] = $count;
        }
        // 查询时间
        $data['createTime'] = date("Y-m-d H:i:s");
        // 返回数据
        return $data;
    }

    /**
     *响应提示返回
     * @param int $code 状态码
     * @param string $msg 提示
     * @param mixed $data 返回数据
     */
    public function initTips($code = -1, $msg = '', $data = null)
    {
        // 是否自定义返回提示
        if ($msg == '') {
            switch ($code) {
                case 100:
                    $msg = '表单验证错误';
                    break;
                case 200:
                    $msg = '成功';
                    break;
                case 300:
                    $msg = '无操作权限';
                    break;
                case 400:
                    $msg = '操作失败';
                    break;
                case 500:
                    $msg = '内部服务器错误';
                    break;
                default:
                    $msg = '未知异常';
                    break;
            }
        }
        return ['code' => $code, 'msg' => $msg, 'data' => $data];
    }
}
